import numpy as np

# 假设数据（每行代表一个样本，每列代表一个指标）
data = np.array([
    [80, 70, 60, 75],
    [70, 85, 70, 80],
    [90, 75, 80, 90],
    [85, 80, 65, 85],
    [56, 75, 10, 96],
    [10, 69, 40, 25]
])

# 假设行权重（每个样本的权重）
row_weights = np.array([0.2, 0.25, 0.2, 0.1, 0.15, 0.1])


# 数据标准化（最小-最大标准化）
def standardize(data):
    min_vals = data.min(axis=0)
    max_vals = data.max(axis=0)
    range_vals = max_vals - min_vals
    standardized_data = (data - min_vals) / range_vals
    return standardized_data


# 计算综合指数，考虑行权重
def calculate_composite_index_with_row_weights(standardized_data, row_weights, column_weights):
    # 确保列权重被归一化
    column_weights = column_weights / column_weights.sum()

    # 计算加权标准化数据的平均值（按行加权）
    weighted_mean = np.average(standardized_data, axis=0, weights=row_weights)

    # 计算综合指数
    composite_index = np.dot(weighted_mean, column_weights) * 100  # 乘以100是为了得到0-100范围的指数值
    return composite_index


# 主函数
def main():
    # 标准化数据
    standardized_data = standardize(data)

    # 假设列权重（每个指标的权重，这里仅作为示例）
    # 注意：这些列权重应该根据你的需求进行定义，可能是通过某种方法计算得到的
    column_weights = np.array([0.25, 0.25, 0.25, 0.25])  # 示例：所有指标权重相等

    # 计算综合指数（考虑行权重和列权重）
    composite_index = calculate_composite_index_with_row_weights(standardized_data, row_weights, column_weights)

    # 输出结果
    print("标准化数据：\n", standardized_data)
    print("行权重：\n", row_weights)
    print("列权重：\n", column_weights)
    print("综合指数（0-100范围）：", composite_index)


if __name__ == "__main__":
    main()